package main

import (
	"fmt"
	"sync"
	"time"
)

/**
读写锁
多路只读
一路只写
读写互斥
**/
func main() {
	var rwm sync.RWMutex
	//锁定为写模式--一路只写不可读 rwm.Lock() 只有一个可以写
	//锁定为读模式--多路只读 rwm.RLock() 多个人同时可以读
	var wg sync.WaitGroup
	count := 5
	for i := 0; i < count; i++ {
		wg.Add(1)
		go func() {
			rwm.RLock()
			fmt.Println("读取数据库...")
			<-time.After(1 * time.Second)
			rwm.RUnlock()
			wg.Done()
		}()
	}
	for i := 0; i < count; i++ {
		wg.Add(1)
		go func() {
			rwm.Lock()
			fmt.Println("写入数据库...")
			<-time.After(1 * time.Second)
			rwm.Unlock()
			wg.Done()
		}()
	}
	wg.Wait()
	fmt.Println("main over")
}
